2.2-docker build
Create by fall on 26 Jan 2025 Recently revised in 26 Jan 2025
docker build
docker build 使用 client-server 架构
- client:buildx,作为客户端以及用户界面去运行和管理 build
- server:BuildKit,用来执行 build 操作
buildx
buildx 默认和 docker desktop 一同安装了
docker build 是对 buildx 的一层包装,当调用 docker build 时,buildx 会解析命令,并且发送一个 build 请求给 buildKit。
除了 build 之外,buildx 还可以创建和管理 BuildKit,以及提供一个 images 的注册表去管理,并且同时运行多个 build
buildx 和 docker build 有一些潜在的区别,可以查看 两者区别
BuildKit
用于后台执行构建工作
在执行 docker build 之后,开始执行 build 工作,buildx 解释你的命令以及发送构建请求给 BuildKit,请求包括:Dockerfile、build 参数,导出配置,缓存配置。
BuildKit 解析这些构建的知道,并且执行这些步骤,在 BuildKit 执行的过程中,Buildx 监控 构建的状态,并且在命令行上输出这些步骤。
如果构建需要一些来自客户端的资源,比如本地文件以及构建密码,BuildKit 从 Buildx 中请求这些所需资源
Dockerfile
docker 通过从 Dockerfile 中读取指示来构建应用
Dockerfile 中最常用命令
# syntax=docker/dockerfile:1
# 首行表示文件定义,可以忽略,该命令表示 docker build 时,始终使用版本 1 语法的最新版本
# 定义一个基本的镜像,之后的所有指令都在该 image 上运行
FROM ubuntu:22.04
# 可以在一个新 ubuntu:22.04 环境内执行任何命令
# 执行命令,更新 apt-get 并且安装 python 所需环境
RUN apt-get update && apt-get install -y python3 python3-pip
RUN pip install flask==3.0.*
# 从本地上下文中复制文件到容器内的 / 路径
COPY hello.py /
# 设置环境变量
ENV FLASK_APP=hello
# 暴露端口,表明有一个服务在 8000 端口上监听
EXPOSE 8000
# 最终,当用户通过该 image 创建一个容器时,运行该内容
CMD ["flask", "run", "--host", "0.0.0.0", "--port", "8000"]
# 命令有两种类型,exec form,shell form,上面的命令时 exec 类型
# shell form
# CMD flask run --host 0.0.0.0 --port 8000
命令
docker build --file
docker build
参考文章
作者 | 文章名称 |
---|---|
爱笑的架构师 | 5分钟带你快速了解Docker和k8s |
佳庆 | docker-compose讲解与安装 |
官方文档 | https://docs.docker.com/get-started/02_our_app/ |